home *** CD-ROM | disk | FTP | other *** search
- ;;; install.el --- Emacs Lisp package install utility
-
- ;; Copyright (C) 1996 Free Software Foundation, Inc.
-
- ;; Author: MORIOKA Tomohiko <morioka@jaist.ac.jp>
- ;; Created: 1996/08/18
- ;; Version: $Id: install.el,v 4.2 1997/11/06 15:52:08 morioka Exp $
- ;; Keywords: install, byte-compile, directory detection
-
- ;; This file is part of APEL (A Portable Emacs Library).
-
- ;; This program is free software; you can redistribute it and/or
- ;; modify it under the terms of the GNU General Public License as
- ;; published by the Free Software Foundation; either version 2, or (at
- ;; your option) any later version.
-
- ;; This program is distributed in the hope that it will be useful, but
- ;; WITHOUT ANY WARRANTY; without even the implied warranty of
- ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- ;; General Public License for more details.
-
- ;; You should have received a copy of the GNU General Public License
- ;; along with GNU Emacs; see the file COPYING. If not, write to
- ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- ;; Boston, MA 02111-1307, USA.
-
- ;;; Code:
-
- (require 'emu)
- (require 'path-util)
-
-
- ;;; @ compile Emacs Lisp files
- ;;;
-
- (defun compile-elisp-module (module &optional path every-time)
- (setq module (expand-file-name (symbol-name module) path))
- (let ((el-file (concat module ".el"))
- (elc-file (concat module ".elc"))
- )
- (if (or every-time
- (file-newer-than-file-p el-file elc-file))
- (byte-compile-file el-file)
- )
- ))
-
- (defun compile-elisp-modules (modules &optional path every-time)
- (mapcar (function
- (lambda (module)
- (compile-elisp-module module path every-time)
- ))
- modules))
-
-
- ;;; @ install files
- ;;;
-
- (defvar install-overwritten-file-modes (+ (* 64 6)(* 8 4) 4))
-
- (defun install-file (file src dest &optional move overwrite)
- (let ((src-file (expand-file-name file src)))
- (if (file-exists-p src-file)
- (let ((full-path (expand-file-name file dest)))
- (if (and (file-exists-p full-path) overwrite)
- (delete-file full-path)
- )
- (copy-file src-file full-path t t)
- (if move
- (catch 'tag
- (while (and (file-exists-p src-file)
- (file-writable-p src-file))
- (condition-case err
- (progn
- (delete-file src-file)
- (throw 'tag nil)
- )
- (error (princ (format "%s\n" (nth 1 err))))
- ))))
- (princ (format "%s -> %s\n" file dest))
- ))
- ))
-
- (defun install-files (files src dest &optional move overwrite)
- (or (file-exists-p dest)
- (make-directory dest t)
- )
- (mapcar (function (lambda (file)
- (install-file file src dest move overwrite)
- ))
- files))
-
-
- ;;; @@ install Emacs Lisp files
- ;;;
-
- (defun install-elisp-module (module src dest)
- (let (el-file elc-file)
- (let ((name (symbol-name module)))
- (setq el-file (concat name ".el"))
- (setq elc-file (concat name ".elc"))
- )
- (let ((src-file (expand-file-name el-file src)))
- (if (file-exists-p src-file)
- (let ((full-path (expand-file-name el-file dest)))
- (if (file-exists-p full-path)
- (delete-file full-path)
- )
- (copy-file src-file full-path t t)
- (princ (format "%s -> %s\n" el-file dest))
- ))
- (setq src-file (expand-file-name elc-file src))
- (if (file-exists-p src-file)
- (let ((full-path (expand-file-name elc-file dest)))
- (if (file-exists-p full-path)
- (delete-file full-path)
- )
- (copy-file src-file full-path t t)
- (catch 'tag
- (while (file-exists-p src-file)
- (condition-case err
- (progn
- (delete-file src-file)
- (throw 'tag nil)
- )
- (error (princ (format "%s\n" (nth 1 err))))
- )))
- (princ (format "%s -> %s\n" elc-file dest))
- ))
- )))
-
- (defun install-elisp-modules (modules src dest)
- (or (file-exists-p dest)
- (make-directory dest t)
- )
- (mapcar (function (lambda (module)
- (install-elisp-module module src dest)
- ))
- modules))
-
-
- ;;; @ detect install path
- ;;;
-
- (defvar install-prefix
- (if (or running-emacs-18 running-xemacs)
- (expand-file-name "../../.." exec-directory)
- (expand-file-name "../../../.." data-directory)
- )) ; install to shared directory (maybe "/usr/local")
-
- (defvar install-elisp-prefix
- (if (>= emacs-major-version 19)
- "site-lisp"
- "local.lisp"))
-
- (defun install-detect-elisp-directory (&optional prefix elisp-prefix
- allow-version-specific)
- (or prefix
- (setq prefix install-prefix)
- )
- (or elisp-prefix
- (setq elisp-prefix install-elisp-prefix)
- )
- (or
- (catch 'tag
- (let ((rest default-load-path)
- dir)
- (while (setq dir (car rest))
- (if (string-match
- (concat "^"
- (expand-file-name (concat ".*/" elisp-prefix) prefix)
- "$")
- dir)
- (if (or allow-version-specific
- (not (string-match (format "%d\\.%d"
- emacs-major-version
- emacs-minor-version) dir))
- )
- (throw 'tag dir)
- ))
- (setq rest (cdr rest))
- )))
- (expand-file-name (concat
- (if running-emacs-19_29-or-later
- "share/"
- "lib/")
- (cond ((boundp 'NEMACS) "nemacs/")
- ((boundp 'MULE) "mule/")
- (running-xemacs
- (if (featurep 'mule)
- "xmule/"
- "xemacs/"))
- (t "emacs/"))
- elisp-prefix) prefix)
- ))
-
- (defvar install-default-elisp-directory
- (install-detect-elisp-directory))
-
-
- ;;; @ end
- ;;;
-
- (provide 'install)
-
- ;;; install.el ends here
-